package com.leo.encryption;

/**
 *
 * <p>签名方式</p>
 *
 * @author quping
 */
public enum SignType {
//    BASE64 严格地说，属于编码格式，而非加密算法
//    MD5(Message Digest algorithm 5，信息摘要算法)
//    SHA(Secure Hash Algorithm，安全散列算法)
//    [SHA1,SHA224,SHA256,SHA384,SHA512]
//    HMAC(Hash Message Authentication Code，散列消息鉴别码)
//    [HmacSHA1,HmacSHA224,HmacSHA256,HmacSHA384,HmacSHA512,HmacMD5]
//    DES(Data Encryption Standard，数据加密算法)
//    PBE(Password-based encryption，基于密码验证)
//    AES(Advanced Encryption Standard 对称加密算法)
//    RSA(算法的名字以发明者的名字命名：Ron Rivest, AdiShamir 和Leonard Adleman)
//    DH(Diffie-Hellman算法，密钥一致协议)
//    DSA(Digital Signature Algorithm，数字签名)
//    ECC(Elliptic Curves Cryptography，椭圆曲线密码编码学)



    /************ 对称加密 ****************/
    /** 默认的AES加密方式：AES/ECB/PKCS5Padding */
    AES("AES"),
    ARCFOUR("ARCFOUR"),
    Blowfish("Blowfish"),
    /** 默认的DES加密方式：DES/ECB/PKCS5Padding */
    DES("DES"),
    /** 3DES算法，默认实现为：DESede/CBC/PKCS5Padding */
    DESede("DESede"),
    RC2("RC2"),
    PBEWithMD5AndDES("PBEWithMD5AndDES"),
    PBEWithSHA1AndDESede("PBEWithSHA1AndDESede"),
    PBEWithSHA1AndRC2_40("PBEWithSHA1AndRC2_40"),

    /*********** 非对称加密 **************/

    /**
     * RSA
     */
    RSA("RSA"),
    // The RSA signature algorithm
    NONEwithRSA("NONEwithRSA"),

    // The MD2/MD5 with RSA Encryption signature algorithm
    MD2withRSA("MD2withRSA"),
    MD5withRSA("MD5withRSA"),

    // The signature algorithm with SHA-* and the RSA
    SHA1withRSA("SHA1withRSA"),
    SHA256withRSA("SHA256withRSA"),
    SHA384withRSA("SHA384withRSA"),
    SHA512withRSA("SHA512withRSA"),

    // The Digital Signature Algorithm
    NONEwithDSA("NONEwithDSA"),
    // The DSA with SHA-1 signature algorithm
    SHA1withDSA("SHA1withDSA"),

    // The ECDSA signature algorithms
    NONEwithECDSA("NONEwithECDSA"),
    SHA1withECDSA("SHA1withECDSA"),
    SHA256withECDSA("SHA256withECDSA"),
    SHA384withECDSA("SHA384withECDSA"),
    SHA512withECDSA("SHA512withECDSA"),

    // 需要BC库加入支持
    SHA256withRSA_PSS("SHA256WithRSA/PSS"),
    SHA384withRSA_PSS("SHA384WithRSA/PSS"),
    SHA512withRSA_PSS("SHA512WithRSA/PSS"),


    /************* 摘要算法 ***********/
    MD2("MD2"),
    /**
     *  MD5 加密
     */
    MD4("MD4"),
    MD5("MD5"),
    MD6("MD6"),
    SHA1("SHA-1"),
    SHA3("SHA-3"),
    SHA224("SHA-224"),
    SHA256("SHA-256"),
    SHA384("SHA-384"),
    SHA512("SHA-512"),
    /*************** HMAC **************/
    HmacMD5("HmacMD5"),
    HmacSHA1("HmacSHA1"),
    HmacSHA256("HmacSHA256"),
    HmacSHA384("HmacSHA384"),
    HmacSHA512("HmacSHA512"),
    /** HmacSM3算法实现，需要BouncyCastle库支持 */
    HmacSM3("HmacSM3"),


    /**
     * HMAC 加密
     */
    HMAC("HMAC"),



    /*************** 国密算法 ************/
    /**
     * 非对称加密和签名
     */
    SM2("SM2"),
    /**
     * 摘要签名算法
     */
    SM3("SM3"),
    /**
     * 对称加密
     */
    SM4("SM4");































    SignType(String type) {
        this.type = type;
    }

    private final String type;

    public String getType() {
        return type;
    }

    @Override
    public String toString() {
        return type;
    }
}
